home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / time / RCS / Time_Divide.c,v < prev    next >
Text File  |  1991-10-22  |  3KB  |  153 lines

  1. head     1.2;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.2.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.2
  10. date     88.06.27.17.23.31;  author ouster;  state Exp;
  11. branches 1.2.1.1;
  12. next     1.1;
  13.  
  14. 1.1
  15. date     88.06.19.14.32.59;  author ouster;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19. 1.2.1.1
  20. date     91.10.22.14.50.31;  author kupfer;  state Exp;
  21. branches ;
  22. next     ;
  23.  
  24.  
  25. desc
  26. @@
  27.  
  28.  
  29. 1.2
  30. log
  31. @Use spriteTime.h instead of time.h.
  32. @
  33. text
  34. @/* 
  35.  * Time_Divide.c --
  36.  *
  37.  *    Source code for the Time_Divide library procedure.
  38.  *
  39.  * Copyright 1988 Regents of the University of California
  40.  * Permission to use, copy, modify, and distribute this
  41.  * software and its documentation for any purpose and without
  42.  * fee is hereby granted, provided that the above copyright
  43.  * notice appear in all copies.  The University of California
  44.  * makes no representations about the suitability of this
  45.  * software for any purpose.  It is provided "as is" without
  46.  * express or implied warranty.
  47.  */
  48.  
  49. #ifndef lint
  50. static char rcsid[] = "$Header: Time_Divide.c,v 1.1 88/06/19 14:32:59 ouster Exp $ SPRITE (Berkeley)";
  51. #endif not lint
  52.  
  53. #include <sprite.h>
  54. #include <spriteTime.h>
  55.  
  56. /*
  57.  * OVERFLOW is used to see if multiple precision multiplication
  58.  * and division are required in the Time_Multiply  and Time_Divide routines.
  59.  * The number is equal to (2 ** 31 - 1) / 1000000.
  60.  */
  61.  
  62. #define OVERFLOW 2147
  63.  
  64. /*
  65.  *----------------------------------------------------------------------
  66.  *
  67.  * Time_Divide --
  68.  *
  69.  *      Computes a fraction of a time value.
  70.  *    E.g. computes a time of a quarter second given the 
  71.  *    constant time_OneSecond and a factor of 4.
  72.  *
  73.  * Results:
  74.  *     The quotient of the division of the time value by the factor.
  75.  *
  76.  * Side effects:
  77.  *     None.
  78.  *
  79.  *----------------------------------------------------------------------
  80.  */
  81.  
  82. void
  83. Time_Divide(time, factor, resultPtr)
  84.     Time          time;
  85.     int              factor;
  86.     register Time *resultPtr;
  87. {
  88.     register int     mod;
  89.  
  90.     if (factor != 0) {
  91.     /*
  92.      * If there is a remainder from dividing the seconds portion by the
  93.      * factor, convert it to microseconds and add it to the microseconds 
  94.      * portion. This will make the division of microseconds by factor 
  95.      * accurate.
  96.      */
  97.  
  98.     resultPtr->seconds    = time.seconds / factor;
  99.     mod               = time.seconds % factor;
  100.  
  101.     /*
  102.      * Check to see if the multiplication involving mod will overflow.
  103.      * If so, use floating point (which is expensive).
  104.      */
  105.  
  106.     if (mod > OVERFLOW) {
  107.         resultPtr->microseconds = (((double) mod * (double) ONE_SECOND) +
  108.                      (double) time.microseconds) / (double) factor;
  109.     } else {
  110.         resultPtr->microseconds = ((mod * ONE_SECOND) + 
  111.                     time.microseconds) / factor;
  112.     }
  113.  
  114.     while (resultPtr->microseconds >= ONE_SECOND) {
  115.         resultPtr->seconds        += 1;
  116.         resultPtr->microseconds    -= ONE_SECOND;
  117.     }
  118.     while (resultPtr->microseconds < 0) {
  119.         resultPtr->seconds        -= 1;
  120.         resultPtr->microseconds    += ONE_SECOND;
  121.     }
  122.     } else {
  123.     resultPtr->seconds    = 0;
  124.     resultPtr->microseconds    = 0;
  125.     }
  126. }
  127. @
  128.  
  129.  
  130. 1.2.1.1
  131. log
  132. @Initial branch for Sprite server.
  133. @
  134. text
  135. @d17 1
  136. a17 1
  137. static char rcsid[] = "$Header: /sprite/src/lib/c/time/RCS/Time_Divide.c,v 1.2 88/06/27 17:23:31 ouster Exp $ SPRITE (Berkeley)";
  138. @
  139.  
  140.  
  141. 1.1
  142. log
  143. @Initial revision
  144. @
  145. text
  146. @d17 1
  147. a17 1
  148. static char rcsid[] = "$Header: proto.c,v 1.2 88/03/11 08:39:08 ouster Exp $ SPRITE (Berkeley)";
  149. d21 1
  150. a21 1
  151. #include "time.h"
  152. @
  153.